<!DOCTYPE html>
<html>

	<head>
		<meta charset="UTF-8">
		<title></title>
	</head>

	<body>
		关于this的问题 this是Javascript语言的一个关键字。 、
		它代表函数运行时，自动生成的一个内部对象，只能在函数内部使用 this指的是，调用函数的那个对象。
		如果(return)返回值是一个对象，那么this指向的就是那个返回的对象，如果返回值不是一个对象那么this还是指向函数的实例
		<script type="text/javascript">
情况一： 纯粹的函数调用。 因此this就代表全局对象Global。　
			function test() {　　　　
				this.x = 1;　　　　
				alert(this.x);　　
			}
			test(); // 1

			为了证明this就是全局对象.对代码做一些改变：　　
			var x = 1;　　
			function test() {　　　　
				alert(this.x);　　
			}　　
			test(); // 1 

情况二： 作为对象方法的调用 作为某个对象的方法调用， 这时this就指这个上级对象。
			function test() {　　　　
				alert(this.x);　　
			}　　
			var o = {};　　
			o.x = 1;　　
			o.m = test;　　
			o.m(); // 1
		
		尽管对象b中没有属性a，这个this指向的也是对象b，因为this只会指向它的上一级对象，
		不管这个对象中有没有this要的东西。
			var o = {
    		a:10,
    		b:{
       			 // a:12,
        		fn:function(){
            console.log(this.a); //undefined
        			}
    			}
			}
			o.b.fn();

情况三 作为构造函数调用所谓构造函数， 就是通过这个函数生成一个新对象（ object）。 这时， this就指这个新对象　
			var x = 2;　　
			function test() {　　　　
				this.x = 1;
			}　　
			var o = new test();　　
			alert(x); //2

情况四 apply调用函数对象的一个方法， 它的作用是改变函数的调用对象，
		    它的第一个参数就表示改变后的调用这个函数的对象.this指的就是这第一个参数。	　　
			var x = 0;		　　
			function test() {			　　　　
				alert(this.x);				　　
			}			　　
			var o = {};			　　
			o.x = 1;		　　
			o.m = test;		　　
			o.m.apply(); //
			apply() 的参数为空时， 默认调用全局对象。 因此， 这时的运行结果为0， 证明this指的是全局对象。
			如果把最后一行代码修改为
				o.m.apply(o); //1运行结果就变成了1，证明了这时this代表的是对象o 
		</script>
	</body>

</html>